package com.bosssoft.cloud.wechat.core.infra.properties;

import com.bosssoft.cloud.wechat.infrastructure.factory.YamlAndPropertySourceFactory;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.Map;

/**
 * wechat模板消息通知发送模板
 *
 * @author wcy create on 2021/7/1 16:26 下午
 */
@Data
@Component
@ConfigurationProperties(prefix = "wx_template")
@PropertySource(value = "classpath:config/wx-tmplate.yaml", factory = YamlAndPropertySourceFactory.class)
public class WxTempletProperties {

    /**
     * 模板消息
     */
    private SendTemplate send;
    /**
     * 普通文本消息
     */
    private TextTemplate text;
    /**
     * 事件模板
     */
    private EventTemplate event;
    /**
     * 菜单模板
     */
    private MenuTemplate menu;

    @Data
    public static class SendTemplate {

        private List<SendData> data;

        @Data
        public static class SendData {
            // id标识
            private String sendId;
            // 模板id，对应公众号后台配置
            private String templateId;
            // 模板消息点击跳转的url
            private String url;
            // 详细内容
            private List<SendMsgInfo> msgInfo;
        }

        @Data
        public static class SendMsgInfo {
            // keyword名
            private String key;
            // keyword值
            private String value;
            // keyword颜色
            private String color;
        }

    }

    @Data
    public static class TextTemplate {
        /**
         * 是否必须回复消息，是：至少回复defaultMsg；否：若无匹配，回复null
         */
        private Boolean mustReply;
        /**
         * key: 用户发送的消息
         * value: 对应的回复内容
         */
        private Map<String, TextData> data;

        @Data
        public static class TextData {
            /**
             * 对应回复消息的类型
             */
            private String type;
            /**
             * 回复内容。目前只是回复文本，之后可改类型
             */
            private String msg;
        }
    }

    @Data
    public static class EventTemplate {
        private Map<String, String> data;
    }

    @Data
    public static class MenuTemplate {
        private String active;
//        private List<?> data;
    }
}